Skip to content

feat: Add the primitives a review page reads in - #1

Merged
nfebe merged 12 commits into
mainfrom
feat/review-page-primitives
Aug 30, 2026
Merged

feat: Add the primitives a review page reads in#1
nfebe merged 12 commits into
mainfrom
feat/review-page-primitives

Conversation

@nfebe

@nfebe nfebe commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Six primitives the local review page reads in: where something stands and how far along it is, a list with nothing in it yet and one waiting to be filled, a part of a longer document, and which repository an item in a mixed list came from.

Nine hand rolled empty states across the local views said the same thing at three different paddings, and a verdict was a badge tinted with the review pillar's green whatever the verdict said.

A header takes a line of its own under the title for what is true of the thing being looked at, rather than what can be done to it. A chip gains the warning tone the other three already had. A diff shows what a suggestion replaces beside what it proposes, and renders what was said about a line as the markdown a model writes.

Checks run for the first time here. This package ships source rather than a build, so a renamed or removed component fails in whatever imports it rather than here. The export map is the only thing checkable without an application, so the workflow walks it and confirms the package packs.

nfebe added 12 commits August 29, 2026 01:06
Tokens, primitives, and the graph renderer, in one place because the
alternative was copying. A design copied by hand drifts the moment either copy
changes, and the drift stays invisible until somebody notices the products no
longer look like one.

Nothing here knows what a workspace, a review or a proposal is. Those belong to
whichever application has them, and a package that grew to hold them would be
that application wearing a different name.

Source rather than a build, since every consumer already compiles Vue, and no
releases: it is pinned by commit, which costs nothing and is honest about
moving with the products that use it.
The apps consuming this package had each rebuilt a labelled field, a
text box, a picker, a segmented switcher and a row in a list of things,
by hand and with slightly different spacing every time. All five now
come from here, so a change to how a form or a list looks is one change
rather than one per app.
A detail page is the same header with a back button and a badge beside the
name. Both apps were about to hand-roll a second header rather than reach for
this one, which is how two headers that look almost alike start.
A select, an input and a button standing in the same row were three
different heights, because each was written out by hand with whatever
padding looked right on its own. They share one scale now, at the heights a
button already came in, so a row of controls is one height and a caller who
wants the compact one asks for it by name.
Rules, and most of what people write down, are markdown documents rather
than a line of text. Every surface that had one was showing it as a block of
unformatted characters.

The colours come from the design tokens rather than the typography plugin's
own, so a document reads the same in either theme without a second palette to
keep in step. Markup in the source is not rendered: what goes through here is
written by whoever is using the product.
A box of lines is a text editor pretending to be a list: nothing says an
entry is malformed, nothing stops two of the same, and removing one means
selecting exactly the right characters. Folders, globs and tags are all
lists, and all of them were being typed into a box.
The brand colour here is a red, a few degrees from the one that means
something failed. Every screen that wanted to say "this went well" reached
for a primary tint and told people their work had gone wrong.

A notice now says what it means and gets the colour that goes with it, which
is the only arrangement where that stops happening.
A patch already carries the line numbers on both sides, so they are read out
of it rather than counted. Anything said about a line is drawn under that
line, which is where a person expects to find it and where they can act on it
without holding a file path in their head.
A badge says what something is; a chip says what somebody picked. The
difference is that the second one comes off. A list of choices with no way
back out of them is a list of decisions, which is a worse thing to hand
anybody.
A suggestion that says what is wrong and not what to write instead leaves the
reader to do the work twice. Where whoever said it offered the replacement,
it is drawn under the comment, against the line it replaces.
Six of them. Where something stands and how far along it is, a list with
nothing in it yet and one waiting to be filled, a part of a longer
document, and which repository an item in a mixed list came from.

Nine hand rolled empty states across the local views said the same thing
at three different paddings, and a verdict was a badge tinted with the
review pillar's green whatever it said.

A header takes a line of its own under the title, for what is true of
the thing being looked at rather than what can be done to it. A chip
gains the warning tone the other three already had. A diff shows what a
suggestion replaces beside what it proposes, and renders what was said
about a line as the markdown a model writes.
This package ships source rather than a build, so nothing fails here when
a component is renamed or removed. It fails in whatever imports it, and
the export map is the only place that can be checked without one.
@nfebe
nfebe merged commit f09293e into main Aug 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant